import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建 axios 实例
const service = axios.create({
    baseURL: 'http://localhost:9091', // 设置基础路径
    timeout: 15000, // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
    (config) => {
        // 从 localStorage 获取 token
        const token = localStorage.getItem('token');
        console.log("token:" + token)
        if (token) {
            // 确保token格式正确，如果已经包含Bearer前缀则不重复添加
            config.headers['Authorization'] = token.includes('Bearer ') ? token : `Bearer ${token}`;
        }
        return config
    },
    (error) => {
        console.log(error)
        return Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data
        // 如果响应数据是数字类型，直接返回
        if (typeof res === 'number') {
            return res
        }
        // 如果返回的状态码不是 200，说明接口请求失败
        if (res.code !== 200) {
            ElMessage.error(res.message || '请求失败')
            return Promise.reject(new Error(res.message || '请求失败'))
        } else {
            return res
        }
    },
    error => {
        console.error('请求错误:', error)
        if (error.response) {
            // 服务器返回了错误状态码
            const { status, data } = error.response
            switch (status) {
                case 400:
                    ElMessage.error(data?.message || '请求参数错误')
                    break
                case 401:
                    ElMessage.error('未授权，请重新登录')
                    // 可以在这里处理登录过期的逻辑
                    break
                case 403:
                    ElMessage.error('拒绝访问')
                    break
                case 404:
                    ElMessage.error('请求的资源不存在')
                    break
                case 500:
                    ElMessage.error(data?.message || '服务器错误')
                    break
                default:
                    ElMessage.error(data?.message || '请求失败')
            }
        } else if (error.request) {
            // 请求发出但没有收到响应
            ElMessage.error('网络错误，请检查您的网络连接')
        } else {
            // 请求配置出错
            ElMessage.error('请求配置错误')
        }
        return Promise.reject(error)
    }
)

export default service 